using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._3DObjects
{
    /// <summary>
    /// <para>Remove 3D Formats From Multipatch</para>
    /// <para>Removes the 3D formats  referenced by a 3D object feature layer.</para>
    /// <para>移除 3D 对象要素图层引用的 3D 格式。</para>
    /// </summary>    
    [DisplayName("Remove 3D Formats From Multipatch")]
    public class Remove3DFormats : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public Remove3DFormats()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The multipatch feature class that was converted to a 3D object feature class.</para>
        /// <para>转换为 3D 对象要素类的多面体要素类。</para>
        /// </param>
        public Remove3DFormats(object _in_features)
        {
            this._in_features = _in_features;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Remove 3D Formats From Multipatch";

        public override string CallName => "management.Remove3DFormats";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_features, _multipatch_materials.GetGPValue(), _formats, _updated_features];

        /// <summary>
        /// <para>Input Features</para>
        /// <para>The multipatch feature class that was converted to a 3D object feature class.</para>
        /// <para>转换为 3D 对象要素类的多面体要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Use multipatch materials</para>
        /// <para><xdoc>
        ///   <para>Specifies whether the multipatch geometry will be visualized using material information from the associated 3D models or the texture and color information stored with the multipatch.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—The multipatch geometry will be visualized using the textures, colors, effects, and materials associated with the 3D models. This is the default.</bullet_item><para/>
        ///     <bullet_item>Unchecked—The multipatch geometry will be visualized using the textures and colors defined for the multipatch.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是使用关联 3D 模型中的材质信息还是使用多面体存储的纹理和颜色信息来可视化多面体几何图形。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将使用与 3D 模型关联的纹理、颜色、效果和材质对多面体几何进行可视化。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>未选中 - 将使用为多面体定义的纹理和颜色来可视化多面体几何。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Use multipatch materials")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _multipatch_materials_value _multipatch_materials { get; set; } = _multipatch_materials_value._true;

        public enum _multipatch_materials_value
        {
            /// <summary>
            /// <para>MULTIPATCH_WITH_MATERIALS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("MULTIPATCH_WITH_MATERIALS")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>MULTIPATCH_WITHOUT_MATERIALS</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("MULTIPATCH_WITHOUT_MATERIALS")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>3D Formats to Remove</para>
        /// <para><xdoc>
        ///   <para>Specifies the 3D model formats referenced by the 3D object feature layer that will be removed. Only the formats that have been linked to the input features can be specified.</para>
        ///   <bulletList>
        ///     <bullet_item>Collada (.dae)—The COLLADA format will be removed.</bullet_item><para/>
        ///     <bullet_item>Autodesk (.fbx)—The Autodesk FilmBox format will be removed.</bullet_item><para/>
        ///     <bullet_item>Khronos Group glTF json (.gltf)—The JSON Graphics Library Transmission format will be removed.</bullet_item><para/>
        ///     <bullet_item>Khronos Group glTF binary (.glb)—The binary Graphics Library Transmission format will be removed.</bullet_item><para/>
        ///     <bullet_item>Wavefront (.obj)—The Wavefront format will be removed.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将被移除的 3D 对象要素图层所引用的 3D 模型格式。只能指定已链接到输入要素的格式。</para>
        ///   <bulletList>
        ///     <bullet_item>Collada （.dae） - 将删除 COLLADA 格式。</bullet_item><para/>
        ///     <bullet_item>Autodesk （.fbx） - 将删除 Autodesk FilmBox 格式。</bullet_item><para/>
        ///     <bullet_item>Khronos Group glTF json （.gltf） - 将删除 JSON 图形库传输格式。</bullet_item><para/>
        ///     <bullet_item>Khronos Group glTF 二进制文件 （.glb） - 将删除二进制图形库传输格式。</bullet_item><para/>
        ///     <bullet_item>波前 （.obj） - 将删除波前格式。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("3D Formats to Remove")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _formats { get; set; } = null;


        /// <summary>
        /// <para>Updated Input Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _updated_features { get; set; }


        public Remove3DFormats SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}